﻿using System.Web.Services;
using System;
using System.Web;

namespace curbside.Services
{
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class CommonServices : WebService
    {
        #region datetime

        /// <summary>
        /// 获取系统的当前时间
        /// </summary>
        /// <returns></returns>
        [WebMethod]
        [AjaxPro.AjaxMethod]
        public DateTime CurrentDateTime()
        {
            return DateTime.Now;
        }

        #endregion

        #region string encode/decode

        /// <summary>
        /// 对URL字符串进行编码
        /// </summary>
        /// <param name="str">要编码的文本</param>
        /// <returns></returns>
        [WebMethod]
        [AjaxPro.AjaxMethod]
        public static string UrlEncode(string str)
        {
            return HttpUtility.UrlEncode(str);
        }

        /// <summary>
        /// 将已经为在 URL 中传输而编码的字符串转换为解码的字符串。
        /// </summary>
        /// <param name="str">要解码的字符串。</param>
        /// <returns></returns>
        [WebMethod]
        [AjaxPro.AjaxMethod]
        public static string UrlDecode(string str)
        {
            return HttpUtility.UrlDecode(str);
        }

        /// <summary>
        /// 对 URL 字符串的路径部分进行编码，以进行从 Web 服务器到客户端的可靠的 HTTP 传输。
        /// </summary>
        /// <param name="str">要进行 URL 编码的文本。</param>
        /// <returns></returns>
        [WebMethod]
        [AjaxPro.AjaxMethod]
        public static string UrlPathEncode(string str)
        {
            return HttpUtility.UrlPathEncode(str);
        }

        /// <summary>
        /// 对 URL 字符串的路径部分进行编码，以进行从 Web 服务器到客户端的可靠的 HTTP 传输。
        /// </summary>
        /// <param name="str">要进行 URL 编码的文本。</param>
        /// <param name="encodeParams">是否对参数进行编码。</param>
        /// <returns></returns>
        [WebMethod]
        [AjaxPro.AjaxMethod]
        public static string UrlPathEncode(string str, bool encodeParams)
        {
            if (encodeParams)
            {
                if (string.IsNullOrEmpty(str)) return str;
                bool absoluteUrl = true;
                if (!(str.StartsWith("http://") || str.StartsWith("https://"))) absoluteUrl = false;

                if (absoluteUrl)
                {
                    Uri uri = new Uri(str);
                    return uri.AbsoluteUri;
                }
                else
                {
                    bool flag = true;
                    if (!str.StartsWith("/"))
                    {
                        str = "/" + str;
                        flag = false;
                    }

                    str = "http://localhost" + str;
                    Uri uri = new Uri(str);
                    str = uri.PathAndQuery;
                    if (!flag) str = str.Substring(1);
                    return str;
                }
            }
            else
            {
                return UrlPathEncode(str);
            }
        }

        /// <summary>
        /// 将字符串转换为 HTML 编码的字符串。
        /// </summary>
        /// <param name="str">要编码的字符串。</param>
        /// <returns></returns>
        [WebMethod]
        [AjaxPro.AjaxMethod]
        public static string HtmlEncode(string str)
        {
            return HttpUtility.HtmlEncode(str);
        }

        /// <summary>
        /// 将已经为 HTTP 传输进行过 HTML 编码的字符串转换为已解码的字符串。
        /// </summary>
        /// <param name="str">要解码的字符串。</param>
        /// <returns></returns>
        [WebMethod]
        [AjaxPro.AjaxMethod]
        public static string HtmlDecode(string str)
        {
            return HttpUtility.HtmlDecode(str);
        }

        #endregion
    }
}
